#pragma once

VAMPIRE_NAMESPACE_BEGIN

class Radian;

class _VampireExport Degree : public MemoryAlloc
{
public:
	Degree(void) : mData(0.0f) {}

	explicit Degree(const Real& data) : mData(data) {}

	Degree                  operator + (const Degree& rhs) const;
	Degree                  operator + (const Real& rhs) const;

	Degree                  operator - (const Degree& rhs) const;
	Degree                  operator - (const Real& rhs) const;

	Degree                  operator * (const Degree& rhs) const;
	Degree                  operator * (const Real& rhs) const;

	Degree                  operator / (const Degree& rhs) const;
	Degree                  operator / (const Real& rhs) const;

	Degree&                 operator += (const Degree& rhs);
	Degree&                 operator += (const Real& rhs);

	Degree&                 operator -= (const Degree& rhs);
	Degree&                 operator -= (const Real& rhs);

	Degree&                 operator *= (const Degree& rhs);
	Degree&                 operator *= (const Real& rhs);

	Degree&                 operator /= (const Degree& rhs);
	Degree&                 operator /= (const Real& rhs);

	void                    operator = (const Degree& rhs);
	void                    operator = (const Real& rhs);

	bool                    operator == (const Degree& rhs) const;
	bool                    operator != (const Degree& rhs) const;

	Degree                  operator + () const;
	Degree                  operator - () const;

	Radian                  toRadian() const;

public:
	Real                    mData;
};

VAMPIRE_NAMESPACE_END
